package com.bw.service.customer.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.bw.entity.customer.PiCustomer;
import com.bw.entity.linkMan.Linkman;
import com.bw.mapper.customer.PiCustomerMapper;
import com.bw.resp.ResponseResult;
import com.bw.service.customer.IPiCustomerService;
import com.bw.service.linkman.ILinkmanService;
import com.bw.utils.sms.SendSms;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;


import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author yinxurui
 * @since 2020-06-16
 */
@Service
public class PiCustomerServiceImpl extends ServiceImpl<PiCustomerMapper, PiCustomer> implements IPiCustomerService {

    @Autowired
    private ILinkmanService linkmanService;

    @Autowired
    private StringRedisTemplate redisTemplate;

    private final Logger logger= LoggerFactory.getLogger(PiCustomerServiceImpl.class);

    @Override
    public ResponseResult sendCode(String tel) {
        ResponseResult result=ResponseResult.SUCCESS();
        //判断用户是否存在
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("tel",tel);
        List<Linkman> linkmanList = linkmanService.list(queryWrapper);
        if(null==linkmanList||0==linkmanList.size()){

            result.setSuccess(false);
            result.setMessage("用户不存在");
            return result;
        }
        logger.info("验证码发送中");
        //判断验证码发送是否过于频繁
        Boolean b =redisTemplate.boundValueOps("S:"+tel).setIfAbsent("y",1, TimeUnit.MINUTES);//频率
        if(!b){
            result.setSuccess(false);
            result.setMessage("发送频繁");
            return result;
        }

        //判断验证码今日发送是否达到上限
        String num = redisTemplate.boundValueOps("P:"+tel).get();
        if(num!=null){
            if(Integer.valueOf(num)>10){
                result.setSuccess(false);
                result.setMessage("今日发送已达上限");
                return result;
            }
        }else{
            redisTemplate.boundValueOps("P:"+tel).expire(1,TimeUnit.DAYS);
        }
        redisTemplate.boundValueOps("P:"+tel).increment();

        //生成验证码
        int code = (int) (Math.random()*1000000);
       //存储验证码
        redisTemplate.boundValueOps("Y:"+tel).set(String.valueOf(code),90,TimeUnit.SECONDS);
        logger.info("验证码"+code);
        //发送短信
        SendSms.send(tel,String.valueOf(code));
        return result;

//        //判断用户是否存在
//        QueryWrapper queryWrapper=new QueryWrapper();
//        queryWrapper.eq("tel",tel);
//        List<Linkman> piLinkmanList = linkmanService.list(queryWrapper);
//        if(null==piLinkmanList||0==piLinkmanList.size()){
//            //logger.info("用户不存在！！！");
//            result.setSuccess(false);
//            result.setMessage("用户不存在！！！");
//            return result;
//        }
//        //判断验证码发送是否过于频繁（频率是一分钟）S:+手机号 作为key 是存储发送频率
//        Boolean bo = redisTemplate.boundValueOps("S:"+tel).setIfAbsent("y",1, TimeUnit.MINUTES);
//        if(!bo){
//           // logger.info("发送过于频繁！！！");
//            result.setSuccess(false);
//            result.setMessage("发送过于频繁");
//            return result;
//        }
//        //判断验证码发送是否今日验发送是否达到上限（一天最多一个手机号10次） P:+手机号 作为key 存储发送次数
//        String num = redisTemplate.boundValueOps("P:"+tel).get(); //获取发送次数
//        if(num!=null){
//            if(Integer.valueOf(num)>10){
//               // logger.info("今日发送短信数已经达到上限！！！");
//                result.setSuccess(false);
//                result.setMessage("今日发送短信数已经达到上限！！！");
//                return result;
//            }
//        }else {
//            redisTemplate.boundValueOps("P:"+tel).expire(1,TimeUnit.DAYS);
//        }
//        redisTemplate.boundValueOps("P:"+tel).increment();
//
//        //发送验证码
//        int code= (int) (Math.random()*1000000);//存储验证码 Y:+s手机号作为key
//        redisTemplate.boundValueOps("Y:"+tel).set(String.valueOf(code),90,TimeUnit.SECONDS);
//        //logger.info("验证码："+code);
//        System.out.println("验证码"+code);
//        //阿里大于发送出去
//
//        return result;
    }
}
